草庐IT

Java HotSpot 枚举开销

全部标签

C++11 枚举类包含重复值

经典的C++枚举没有直接的方法来检测重复值。新的C++11enumclass是否解决了这个问题?enumclassConnectionState:uint32_t{Connecting,Reconnecting=2,Disconnecting,LocalConnection,NoNetwork=2,WifiNetwork,Last} 最佳答案 目前没有办法检测或防止枚举中有多个相同的枚举值。Thereflectionworkinggroup正在研究如何向语言添加反射——C++代码自省(introspection)C++代码的能力。在

c++ - 已签名基础类型枚举的位域溢出

这仅适用于C++11:如果我有一个像下面这样的常规枚举:enumTestType{Test0=0,Test1,Test2,Test3,Test4,Test5,Test6,Test7}和像这样的打包结构:struct{TestTypea:3uint32_tb:5}TestStruct;TestStruct.a是否保证在访问时等于任何有效分配的枚举值?或者编译器是否有可能分配一个带符号的基础类型,然后将位域a视为范围为-4到3。 最佳答案 IsTestStruct.aguaranteedtobeequaltoitsassignedenu

c++ - 在头文件中定义的 c++ 枚举末尾添加一个值会强制重新编译吗?

背景有一个复杂的系统,里面有几个库和应用程序,几乎每个项目都依赖于一个头文件(例如foo.h),它定义了一个枚举(#included在几个cpp文件中)。该设计远非理想(但与往常一样,它是一个遗留系统)。遗憾的是,foo.h经常变化。先决条件假设我们可以保证foo.h将被更新:只在末尾添加元素,而不删除现有值或重新定义它们。问题这样的修改需要重新编译所有包含header的代码吗?我知道这是类的一个常见问题(通常删除未使用的变量会更改内存布局并最终导致核心转储)。我怀疑枚举也可能出现类似情况,在正常情况下我肯定会重新编译所有内容。目前的情况在所有代码库中引入了一种刚性,这极大地影响了系统

C++ 枚举类 - 从 underlying_type 初始化

我想在C++11中从其底层类型初始化一个强类型枚举,这是我从序列化流中读取的一个值,我必须检查它的数字范围是否正确。类似于:enumclassMyEnum{FOO,BAR};MyEnumtest=static_cast(1);这按预期工作,但问题是:MyEnumtest2=static_cast(42);也可以正常工作并且不会提示错误。据我所知,枚举类也没有任何关于如何检查输入是否有效的界限或其他指标的概念。在“旧式”枚举中,我们会包含MIN和MAX值并与它们进行比较,但是将这些值添加到强类型枚举中会再次向该类型添加无效值,从而破坏其目的。我有什么想法可以检查边界或在值超出边界的情况下

c++ - 显示枚举值名称的通用方法

有没有办法显示枚举值的名称?假设我们有:enumfuits{APPLE,MANGO,ORANGE,};main(){enumfruitsxFruit=MANGO;...printf("%s",_PRINT_ENUM_STRING(xFruit));...}使用预处理器#define_PRINT_ENUM_STRING(x)#x将不起作用,因为我们需要获取变量“x”的值,然后将其转换为字符串。这在c/C++中完全可行吗? 最佳答案 您可以使用预处理器来执行此操作,我相信这种技术称为X-Macros:/*fruits.def*/X(AP

c++ - 枚举类型值作为 C++ 中数组的长度

众所周知,C++中的数组长度是必须确定的。然后我们可以使用:constintMAX_Length=100;或:#defineMAX_LENGTH100在编译前确定数组的长度。但是,当我阅读lippman的《c++primer》一书时,在第5版的第3.5.1章中,它说:数组的长度必须是常量表达式。那么问题来了:typedefenumLength{LEN1=100,LEN2,LEN3,LEN4}LEN;LENMAX_Length=LEN2;//101intiArray[LEN2];//attention代码在mingw32-g++中编译成功。但是在VS2008中失败了,错误是:errorC

c++ - 在哪里定义枚举

假设我想创建一个卡片类。并且想要卡片的枚举2,3,4,5,6,7,8,9,J,Q,K,A定义它的最佳位置是头文件Card.h还是Card.cpp? 最佳答案 这将是一个新的类型。所以我可能会把它放在头文件中,以防其他编译单元需要它。 关于c++-在哪里定义枚举,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8650419/

c++ - 枚举 [标签] [ : type] {enum-list} [declarator] in C++ - is this legal?

我正在使用C++中的自定义枚举类型,但它没有很多值。我想尝试减小它们占用的大小,而且我听说enum类型是alwaysintegersbydefault.然后我遇到了MSDNentryonC++enumerations,发现下面的语法很有趣:enum[:type]{enum-list};果然,当我执行以下操作时,它编译出了我想要的(VS2008):enumplane:unsignedchar{xy,xz,yz};现在,您可以从我的枚举常量中看出我不需要太多空间-unsignedchar类型非常适合我的使用。但是,我不得不说,我从未在互联网上的其他地方任何地方见过这种形式——大多数人甚至似

C++ 转换运算符重载、枚举、整数和字符

当我尝试编译(使用gcc4.3.4)此代码片段时:enumSimpleEnum{ONEVALUE};voidmyFunc(inta){}voidmyFunc(charch){}structMyClass{operatorint()const{return0;};operatorSimpleEnum()const{returnONEVALUE;};};intmain(intargc,char*argv[]){myFunc(MyClass());}我收到这个错误:test.cc:Infunction"intmain(int,char**)":test.cc:17:error:callofo

c# - 枚举、重叠值、C#

提前致歉,因为我确定之前一定有人问过这个问题,但我找不到。只是有一个惊喜,一个同事和我都为枚举添加了相同的值,并且它编译了,例如enumMyEnum{mine=1,his=1}看起来C/C++也支持这个(?)。这种行为的任何原因,它有用的任何情况?我看到一个案例使用不同的人类语言(one=1,eins=1,等等)但我不相信谢谢 最佳答案 举个简单的例子enumPrivilegeLevel{None,Reporter,Reviewer,Admin,DefaultForNewUser=None,DefaultForProjectOwne